import threading
from socket import *
import sys
import cPickle

class Personne:
    #nom
    #telephonne
    def __init__(self, nom="nom inconnu",telephone="pas de numero"):
        self.nom=nom
        self.telephone=telephone
        
    def toString(self):
        #print ("nom" , self.getNom() , "numero" , self.getTelephone())
        return "nom : " + self.getNom() + " - numero : " + self.getTelephone()
        
    def getNom(self):
        return self.nom
    
    def getTelephone(self):
        return self.telephone
    
    def lenTelephone(self):
        return len(self.telephone)
    
class Serveur:
    #serverHost
    #serverPort
    #soc
    def __init__(self, serverHost, serverPort, nbConnexion):
        self.serverHost = serverHost
        self.serverPort = serverPort
        self.nbConnexion = nbConnexion
        self.soc = socket(AF_INET, SOCK_STREAM)
        self.contacts = []
        #self.personne = personne()
    
    ###########################################################################
    def ouvrirConnexion(self):
        try:
            soc = socket(AF_INET, SOCK_STREAM)           # create a TCP socket
            soc.bind((self.serverHost, self.serverPort)) # bind it to the server port
            soc.listen(self.nbConnexion)                 # allow 5 simultaneous
        except Exception, inst:
            print inst
    
    def fermerConnexion(self):
        try:
            self.soc.close()
        except Exception, inst:
            print inst
    
    ###########################################################################
    def listerLesContacts(self):
        result = "\n\n--- Liste des contacts :\n"
        for personne in self.contacts :
            result += personne.toString()+"\n"
        return result

    def ajouterUnContact(self):
        nom = raw_input(' Le nom de la personone a ajouter : ')[:-1]
        tel = raw_input(' Le numero de la personone a ajouter : ')[:-1]
        self.contacts.append(Personne(nom, tel)) #nom[:-1] Everything except the last character : \r

    def supprimerUnContact(self):
        result = ""
        nomPers = raw_input("\n\n--- Nom de la personne a supprimer  : ")[:-1]
        for index, pers in enumerate(self.contacts):
            if (pers.getNom()== nomPers) :
                self.contacts.pop(index)
                result +=nomPers +" a ete supprimmer"
                break
        return result
    
    def supprimerTousLesContacts(self):
        result = "--- Suppession de tous les contacts :\n"
        self.contacts = []
        return result

    ###########################################################################
    def sauvegarderContacts(self):
        try:
            f=open("./save", "w")
        except Exception, inst:
            return inst
        else:
            cPickle.dump(self.contacts, f)
            f.close()
            return "--- Sauvegarder dans un fichier :\n"
    
    def chargerContacts(self):
        try:
            f=open("./save", "r")
        except Exception, inst:
            return inst
        else:
            self.contacts = cPickle.load(f)
            f.close()
            return "--- Charger a partir d\'un fichier  :\n"
    
    ###########################################################################


##########
## MAIN ##
##########

def commenceprogramme():
    #serveur
    serv = Serveur("localhost", 2020, 5)
    serv.chargerContacts()
    serv.ouvrirConnexion()
    serv.fermerConnexion()
    print serv.listerLesContacts()
    
    
if __name__=="__main__" :
    commenceprogramme()